// 控制应用生命周期和创建原生浏览器窗口的模组

const { app, BrowserWindow, Menu, ipcMain } = require('electron')
const path = require('path')

const NODE_ENV = process.env.NODE_ENV

process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'

function createWindow() {
  // darwin表示macOS，针对macOS的设置
  if (process.platform === 'darwin') {
    const template = [
      {
        label: '菜单',
        submenu: [
          {
            role: 'about',
          },
          {
            role: 'quit',
          },
        ],
      },
    ]
    const menu = Menu.buildFromTemplate(template)
    Menu.setApplicationMenu(menu)
  } else {
    // windows及linux系统
    Menu.setApplicationMenu(null)
  }

  // 创建浏览器窗口
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    // 去掉外框
    frame: false,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      webSecurity: false, // 是否禁用浏览器的跨域安全特性
      nodeIntegration: true, // 是否完整支持node
    },

    icon: path.join(__dirname, './cs.ico'),
  })

  // 加载 index.html
  // mainWindow.loadFile('dist/index.html') 将该行改为下面这一行，加载url
  mainWindow.loadURL(
    NODE_ENV === 'development'
      ? 'http://localhost:9090'
      : `file://${path.join(__dirname, '../dist/index.html')}`
  )

  // 打开开发工具
  if (NODE_ENV === 'development') {
    mainWindow.webContents.openDevTools()
  }

  // 内部调用windows的方法
  ipcMain.on('close', () => mainWindow.close())
  ipcMain.on('minimize', () => {
    mainWindow.minimize()
  })
  ipcMain.on('maximize', () => {
    // 判断窗口是否已经最大化
    if (mainWindow.isMaximized()) {
      // 窗口还原
      mainWindow.restore()
    } else {
      // 最大化
      mainWindow.maximize()
    }
  })
}
// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  createWindow()
  app.on('activate', function () {
    // 通常在 macOS 上，当点击 dock 中的应用程序图标时，如果没有其他
    // 打开的窗口，那么程序会重新创建一个窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此，通常对程序和它们在
// 任务栏上的图标来说，应当保持活跃状态，直到用户使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})
